// 启用严格模式，保证代码遵循更严格的语法规则，避免一些常见的错误
'use strict'
// 模板版本号
// Template version: 1.3.1
// 模板文档链接，可查看相关文档说明
// see http://vuejs-templates.github.io/webpack for documentation.

// 引入 Node.js 的 path 模块，用于处理和转换文件路径
const path = require('path')

// 导出项目的配置对象，包含开发环境（dev）和生产环境（build）的相关配置
module.exports = {
    // 开发环境的配置
    dev: {
        // 资源路径相关配置
        // 静态资源子目录，打包后静态资源会存放在该目录下
        assetsSubDirectory: 'static',
        // 资源的公共路径，在开发环境中通常为根路径
        assetsPublicPath: '/',
        // 代理配置，用于解决开发环境中的跨域问题
        proxyTable: {
            // 匹配以 /api 开头的请求
            '/api': {
                // 目标服务器地址，请求会被代理到该地址
                target: 'http://localhost:8080',
                // 是否改变请求的源，设置为 true 可避免跨域问题
                changeOrigin: true,
                // 路径重写规则，将请求路径中的 /api 替换为空字符串
                pathRewrite: {
                    '^/api': ''
                }
            }
        },

        // 开发服务器的各种配置
        // 开发服务器的主机地址，可通过环境变量 process.env.HOST 覆盖
        host: 'localhost',
        // 开发服务器的端口号，可通过环境变量 process.env.PORT 覆盖
        // 如果该端口被占用，会自动寻找一个可用的端口
        port: 82,
        // 是否自动打开浏览器，设置为 false 则不会自动打开
        autoOpenBrowser: false,
        // 是否在浏览器中显示错误覆盖层，设置为 true 会在出现错误时显示错误信息
        errorOverlay: true,
        // 是否在出现错误时发出系统通知，设置为 true 会在出现错误时发出通知
        notifyOnErrors: true,
        // 是否使用轮询方式监听文件变化，设置为 false 则不使用轮询
        // 轮询可能会消耗更多资源，但在某些情况下可解决文件监听不及时的问题
        poll: false,

        /**
         * Source Maps 相关配置
         */
        // 开发环境下使用的 source map 类型
        // 'cheap-module-eval-source-map' 生成速度快，适合开发环境
        devtool: 'cheap-module-eval-source-map',

        // 是否开启缓存破坏，设置为 true 可避免缓存问题
        // 如果在开发工具中调试 vue 文件有问题，可尝试设置为 false
        cacheBusting: true,

        // 是否为 CSS 文件生成 source map，设置为 true 可方便调试 CSS
        cssSourceMap: true
    },

    // 生产环境的配置
    build: {
        // 生成的 index.html 文件的路径
        index: path.resolve(__dirname, '../dist/index.html'),

        // 资源路径相关配置
        // 打包后文件的根目录，使用 path.resolve 方法生成绝对路径
        assetsRoot: path.resolve(__dirname, '../dist'),
        // 静态资源子目录，打包后静态资源会存放在该目录下
        assetsSubDirectory: 'static',
        // 资源的公共路径，在生产环境中通常为根路径
        assetsPublicPath: '/',

        /**
         * Source Maps 相关配置
         */
        // 是否为生产环境生成 source map，设置为 true 可方便调试生产环境代码
        productionSourceMap: true,
        // 生产环境下使用的 source map 类型
        devtool: '#source-map',

        // 是否开启 Gzip 压缩，默认关闭
        // 很多流行的静态托管服务（如 Surge 或 Netlify）已经会自动对静态资源进行 Gzip 压缩
        // 在设置为 true 之前，需要先安装 compression-webpack-plugin
        productionGzip: false,
        // 需要进行 Gzip 压缩的文件扩展名
        productionGzipExtensions: ['js', 'css'],

        // 是否生成打包分析报告
        // 可通过 `npm run build --report` 命令在打包完成后查看报告
        // 设置为 true 或 false 可始终开启或关闭报告生成
        bundleAnalyzerReport: process.env.npm_config_report
    }
}